package pub.cleangao.mybatis.dao;


import org.apache.ibatis.annotations.Param;
import java.util.Map;

/**
 * 具备更新功能的Mapper
 *
 * @param <E> 实体类
 */
public interface UpdateMapper<E> extends Mapper<E> {

    /**
     * 更新，更新所有字段
     * <p>根据ID匹配</p>
     *
     * @param entity 实体类
     * @return 受影响行数
     */
    int updateAllFields(@Param("entity") E entity);

    /**
     * 更新，忽略null字段
     * <p>根据ID匹配</p>
     *
     * @param entity 实体类
     * @return 受影响行数
     */
    int update(@Param("entity") E entity);

    /**
     * 根据条件更新
     *
     * <p>根据查询条件匹配</p>
     *
     * @param entity 待更新的数据, 不更新空字段
     * @param query  更新条件
     * @return 受影响行数
     */
    int updateByQuery(@Param("entity") E entity, @Param("query") Query query);

    /**
     * 根据条件更新
     *
     * @param map   待更新的数据，key为数据库字段名,value为待设置的值
     * @param query 查询待更新的数据记录
     * @return 受影响行数
     */
    int updateByMap(@Param("map") Map<String, Object> map, @Param("query") Query query);

    // -------------------------------------------------------------------------------------

}
